package cn.zwx.redisson.distributed.lock.example.config;


import lombok.Data;
import org.redisson.config.TransportMode;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * RedissonProperties 配置类
 * @author zhangwenxue
 */
@Data
@ConfigurationProperties(prefix = "redisson")
public class RedissonProperties {

    private String address;

    /**
     * 长期保持一定数量的连接有利于提高瞬时读取反映速度。默认32
     */
    private Integer connectionMinimumIdleSize = 32;

    /**
     * 每个从服务节点里用于普通操作（非 发布和订阅）连接的连接池最大容量。连接池的连接数量自动弹性伸缩。默认64
     */
    private Integer connectionPoolSize = 64;

    /**
     * 数据库号
     */
    private Integer database = 0;

    /**
     * 密码
     */
    private String password;


    /**
     *  Redisson的对象编码类是用于将对象进行序列化和反序列化，以实现对该对象在Redis里的读取和存储
     *  以供大家选择：https://github.com/redisson/redisson/wiki/4.-data-serialization
     */
    private String codec ="org.redisson.codec.JsonJacksonCodec";

    /**
     *
     # 传输模式，默认NIO，可选参数：
     # TransportMode.NIO,
     # TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包（Linux）
     # TransportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包（macOS）
     */
    private TransportMode transportMode= TransportMode.NIO;

    /**
     * 如果当前连接池里的连接数量超过了最小空闲连接数，而同时有连接空闲时间超过了该数值，
     * 那么这些连接将会自动被关闭，并从连接池里去掉。时间单位是毫秒。默认10000
     */
    private Integer idleConnectionTimeout = 10000;

    /**
     * 同节点建立连接时的等待超时。时间单位是毫秒。默认10000
     */
    private Integer connectTimeout = 10000;

    /**
     * # 等待节点回复命令的时间。该时间从命令发送成功时开始计时。默认3000
     */
    private Integer timeout = 3000;

    /**
     * 命令失败重试次数,如果尝试达到 retryAttempts（命令失败重试次数） 仍然不能将命令发送至某个指定的节点时，将抛出错误。
     * 如果尝试在此限制之内发送成功，则开始启用 timeout（命令等待超时） 计时。
     */
    private Integer retryAttempts = 3;

    /**
     * 在一条命令发送失败以后，等待重试发送的时间间隔。时间单位是毫秒。默认1500
     */
    private Integer retryInterval = 1500;

    /**
     * 在Redis节点里显示的客户端名称
     */
    private String clientName;

    /**
     *  # ping连接间隔
     */
    private Integer pingConnectionInterval=30000;
    

  
}
